import axios from 'axios'
// 创建axios实例，默认已json对象形式接收数据(application/json)
const fetch = axios.create({
  timeout: 10000,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
})

// request拦截器相关处理
fetch.interceptors.request.use(config => {
  return config
}, error => {
  return Promise.reject(error)
})

// response拦截器相关处理
fetch.interceptors.response.use(response => {
  // 401, token失效，跳转到登录页
  if (response.data && response.data.code === 401) {
    // Vue.$router.push({path: '/login'})
  }
  // 404, 页面地址不存在，跳转到首页
  if (response.data && response.data.code === 404) {
  }
  // 请求超时
  if (response.data.message && response.data.message.indexOf('connect ECONNREFUSED') !== -1) {
    fetch.$Message && fetch.$Message({
      content: '网络请求超时!',
      type: 'error'
    })
  }
  if (response.data.code === '0') {
    // 正常
    return response.data
  } else {
    // 通过config里面的message来判断是否显示
    if (typeof response.config.message === 'boolean' && !response.config.message) {
      return response.data
    } else {
      fetch.$Message && fetch.$Message({
        message: response.data.message,
        type: 'error'
      })
      return Promise.reject(new Error(response.data.message))
    }
  }
}, error => {
  if (error.response.data) {
    fetch.$Message && fetch.$Message({
      message: error.response.data.message,
      type: 'error'
    })
    return Promise.reject(new Error(error.response.data))
  } else {
    fetch.$Message && fetch.$Message({
      message: error.message,
      type: 'error'
    })
    return Promise.reject(error)
  }
})
// 将父对象直接暴露出去
fetch.prototype.axios = axios
// 初始化信息
fetch.init = function({ message }) {
  // 根据不同框架，提供不同的弹框
  fetch.$Message = message
}
export default fetch
